{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "heading_collapsed": "false"
   },
   "outputs": [],
   "source": [
    "import csop_helper as csop\n",
    "import pandas as pd \n",
    "\n",
    "#Feel free to un-silence warnings by commenting out the lines below\n",
    "import warnings\n",
    "warnings.filterwarnings(\"ignore\")\n",
    "\n",
    "import numpy as np\n",
    "import matplotlib.pyplot as plt "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Overview \n",
    "This notebook relies on pre-processing functions defined in csop_helper.py to preprocess the raw data from CSV, generate the features needed for downstream visualization and analysis, and save the processed data to the same directory the notebook is run in. \n",
    "\n",
    "A copy of the processed data is also already provided as \"rounds_data_phase2_processed.pkl\" for your convenience. "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "heading_collapsed": "false"
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Base processing...\n",
      "Parsing logs...\n",
      "Parsing round data...\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "2150it [00:05, 422.29it/s]\n"
     ]
    }
   ],
   "source": [
    "df_base = csop.base_processing(\"./rounds_data_phase2_raw.csv\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {
    "heading_collapsed": "false"
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Processing time features...\n",
      "Processing solution features...\n"
     ]
    }
   ],
   "source": [
    "df_added_features = csop.additional_features(df_base.copy())"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {
    "heading_collapsed": "false",
    "tags": []
   },
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "  0%|                                                                                                                                                  | 0/4 [00:00<?, ?it/s]\n",
      "  0%|                                                                                                                                                  | 0/6 [00:00<?, ?it/s]\u001b[A\n",
      " 17%|███████████████████████                                                                                                                   | 1/6 [00:00<00:01,  3.30it/s]\u001b[A\n",
      " 33%|██████████████████████████████████████████████                                                                                            | 2/6 [00:00<00:01,  3.24it/s]\u001b[A\n",
      " 50%|█████████████████████████████████████████████████████████████████████                                                                     | 3/6 [00:00<00:00,  3.87it/s]\u001b[A\n",
      " 67%|████████████████████████████████████████████████████████████████████████████████████████████                                              | 4/6 [00:00<00:00,  4.40it/s]\u001b[A\n",
      " 83%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████                       | 5/6 [00:01<00:00,  4.80it/s]\u001b[A\n",
      "100%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 6/6 [00:01<00:00,  4.50it/s]\u001b[A\n",
      " 25%|██████████████████████████████████▌                                                                                                       | 1/4 [00:01<00:03,  1.33s/it]\n",
      "  0%|                                                                                                                                                  | 0/6 [00:00<?, ?it/s]\u001b[A\n",
      " 17%|███████████████████████                                                                                                                   | 1/6 [00:00<00:01,  3.27it/s]\u001b[A\n",
      " 33%|██████████████████████████████████████████████                                                                                            | 2/6 [00:00<00:01,  3.21it/s]\u001b[A\n",
      " 50%|█████████████████████████████████████████████████████████████████████                                                                     | 3/6 [00:00<00:00,  3.84it/s]\u001b[A\n",
      " 67%|████████████████████████████████████████████████████████████████████████████████████████████                                              | 4/6 [00:01<00:00,  4.34it/s]\u001b[A\n",
      " 83%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████                       | 5/6 [00:01<00:00,  4.71it/s]\u001b[A\n",
      "100%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 6/6 [00:01<00:00,  3.92it/s]\u001b[A\n",
      " 50%|█████████████████████████████████████████████████████████████████████                                                                     | 2/4 [00:02<00:02,  1.45s/it]\n",
      "  0%|                                                                                                                                                  | 0/6 [00:00<?, ?it/s]\u001b[A\n",
      " 17%|███████████████████████                                                                                                                   | 1/6 [00:00<00:01,  3.31it/s]\u001b[A\n",
      " 33%|██████████████████████████████████████████████                                                                                            | 2/6 [00:00<00:01,  3.20it/s]\u001b[A\n",
      " 50%|█████████████████████████████████████████████████████████████████████                                                                     | 3/6 [00:00<00:00,  3.78it/s]\u001b[A\n",
      " 67%|████████████████████████████████████████████████████████████████████████████████████████████                                              | 4/6 [00:01<00:00,  4.29it/s]\u001b[A\n",
      " 83%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████                       | 5/6 [00:01<00:00,  4.73it/s]\u001b[A\n",
      "100%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 6/6 [00:01<00:00,  4.44it/s]\u001b[A\n",
      " 75%|███████████████████████████████████████████████████████████████████████████████████████████████████████▌                                  | 3/4 [00:04<00:01,  1.41s/it]\n",
      "  0%|                                                                                                                                                  | 0/6 [00:00<?, ?it/s]\u001b[A\n",
      " 17%|███████████████████████                                                                                                                   | 1/6 [00:00<00:01,  3.38it/s]\u001b[A\n",
      " 33%|██████████████████████████████████████████████                                                                                            | 2/6 [00:00<00:01,  3.29it/s]\u001b[A\n",
      " 50%|█████████████████████████████████████████████████████████████████████                                                                     | 3/6 [00:00<00:00,  3.91it/s]\u001b[A\n",
      " 67%|████████████████████████████████████████████████████████████████████████████████████████████                                              | 4/6 [00:00<00:00,  4.41it/s]\u001b[A\n",
      " 83%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████                       | 5/6 [00:01<00:00,  4.76it/s]\u001b[A\n",
      "100%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 6/6 [00:01<00:00,  4.52it/s]\u001b[A\n",
      "100%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 4/4 [00:05<00:00,  1.39s/it]\n"
     ]
    }
   ],
   "source": [
    "df_nominal = csop.generate_nominal_groups(df_added_features.copy(), players_filepath=\"./players.csv\", phase1_filepath=\"./rounds_data_phase1_raw.csv\", n_nominal_groups=5000)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {
    "heading_collapsed": "false"
   },
   "outputs": [],
   "source": [
    "df_final = pd.concat([df_added_features, df_nominal], ignore_index=True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {
    "heading_collapsed": "false"
   },
   "outputs": [],
   "source": [
    "standardized_columns = [\"score\", \"round_duration\", \"efficiency\",\n",
    "                        \"time_to_first_step\", \"time_from_first_step_to_best\", \"time_from_best_to_final\", \"time_from_final_to_submit\",\n",
    "                        \"ROUNDFEAT_SOLNS_num_inter_soln\", \"intermediate_solution_pace\", \"max_soln_dist_fillna\", \"normalized_best_score\", \"pct_solns_dist2_from_last\"]\n",
    "\n",
    "\n",
    "csop.standardize_data(df_final, standardized_columns, base_categories={'nominal-group-random', 'nominal-group-score', 'nominal-group-duration', 'nominal-group-efficiency', 'real-group'})"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {
    "heading_collapsed": "false"
   },
   "outputs": [],
   "source": [
    "df_final.to_pickle(\"./rounds_data_phase2_processed.pkl\")"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "csop1",
   "language": "python",
   "name": "csop1"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.8.18"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
